package com.fh.qqclient.service;

import com.fh.qqcommon.Message;
import com.fh.qqcommon.MessageType;
import com.fh.qqcommon.User;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

/**
 * @author 方小勤
 * @version 1.0~
 * 该类完成用户登录验证和用户注册等功能
 */
public class UserClientService {
    // 根据userId 和 pwd 到服务器验证该用户是否合法
    private User u = new User();
    //Socket 在其他地方也可能使用,因此做成属性
    private Socket socket ;
    public boolean checkUser(String userId, String password) throws IOException, ClassNotFoundException {
        boolean flag = false;
        //创建User对象
        u.setUserID(userId);
        u.setPassword(password);
        //连接到服务端发送 u 对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
        objectOutputStream.writeObject(u);//发送User对象
        //读取从服务端回复的Message对象
        ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
        Message object =(Message) objectInputStream.readObject();
        if (object.getMesType().equals(MessageType.MESSAGE_LOGIN_SUCCESS)){//登录OK
            //创建一个和服务器端保持通讯的线程
            ClientConnectServerThead clientConnectServerThead = new ClientConnectServerThead(socket);
            //启动客户端的线程
            clientConnectServerThead.start();
            //为了后面客户端的扩展，这里将线程放在集合中管理
            ManageClientConnectServerThread.addClientConnectServerThread(userId,clientConnectServerThead);
            flag = true;
        }else{
            //如果登录失败，我们就不能启动这个线程，现在就关闭Socket
            socket.close();
        }
        return flag;
    }
    public void onlineFriedList() throws IOException {
        //发送一个Message，类型 MESSAGE_GET_ONLINE_FRIEND
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_GET_ONLINE_FRIEND);
        message.setSender(u.getUserID());
        //发送给服务器
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(ManageClientConnectServerThread.getClientConnectServerThread(u.getUserID()).getSocket().getOutputStream());//得到该线程的 Socket 对应的 ObjectOutputStream 对象
        objectOutputStream.writeObject(message); //发送一个 Message 对象，向服务端要求在线用户列表
    }
    //编写方法，退出客户端并给服务端发送退出系统的message对象
    public void logout(){
        Message message = new Message();
        message.setMesType(MessageType.MESSAGE_CLIENT_EXIT);
        message.setSender(u.getUserID()); //指出是哪一个客户端id
        //发送message
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(ManageClientConnectServerThread.getClientConnectServerThread(u.getUserID()).getSocket().getOutputStream());
            objectOutputStream.writeObject(message);
            System.out.println(u.getUserID() + " 退出系统");
            System.exit(0);//结束进程
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

}
